//
//  HSTabBarController.swift
//  Home_School_08
//
//  Created by 张晓林 on 2016/12/22.
//  Copyright © 2016年 张晓林. All rights reserved.
//

import UIKit

class HSTabBarController: UITabBarController {
    // 用于传递左边按钮事件的闭包属性
    var leftBtnClock:(() -> ())?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // 设置标签按钮标题颜色
        tabBar.tintColor = UIColor.colorWithHex(hexColor: 0x00a0e9)
        
        // 模拟网络数据加载
        guard let filePath = Bundle.main.path(forAuxiliaryExecutable: "tabar.plist"),let dictArr = NSArray(contentsOfFile: filePath) else {
                return
        }
        
        // 循环创建并添加子控制器
        for dict in dictArr {
            // 使用自定义的方法根据传入的字典来初始化
            addChildVc(dict as! NSDictionary)
        }
        
    }
    
    // ”重载“添加自控制的方法
    func addChildVc(_ dict: NSDictionary) {
        // 获得命名空间
       guard let bundleName = Bundle.main.bundleName,
        // 获得字典中的控制器类名称
        let vcStr = dict["vc"] as? String,
        // 将字符串转换为类(反射机制方法)
        let classVc = NSClassFromString("\(bundleName).\(vcStr)") as? UIViewController.Type,
        // 获得图片名称
        let imageName = dict["imageName"] as? String else {
            return
        }
        // 根据转换的类型初始化，获得控制器对象
        let vc = classVc.init()
        vc.title = dict["title"] as? String
        vc.tabBarItem.image = UIImage(named: "\(imageName)_nor")
        vc.tabBarItem.selectedImage = UIImage(named: "\(imageName)_press")?.withRenderingMode(.alwaysOriginal)
        // 添加左边按钮
        let leftBtn = UIBarButtonItem(imageName: "icon_menu", target: self, action: #selector(leftBtnClicked))
        vc.navigationItem.leftBarButtonItem = leftBtn
        
        // 包装一个导航控制器,使用自定义导航控制器
        let navVc = HSNavigationController(rootViewController: vc)
        
        addChildViewController(navVc)
    }
    
    // 左边导航按钮的监听回调方法
    func leftBtnClicked() {
        // 获得主窗口
        let keyWindow = UIApplication.shared.keyWindow
        keyWindow?.endEditing(true)
        // 执行闭包，传递事件
        leftBtnClock?()
    }
    
}
